﻿using System;
using System.Collections.Generic;
using System.Text;
using Siderys.Blog.Search.Engine.Resultado;
namespace Siderys.Blog.Search.Engine.WebService
{
    public class ConsultaWebServices
    {
        QueryServiceMoss.QueryService lQueryService = null;
        public ConsultaWebServices()
        {
            lQueryService = new QueryServiceMoss.QueryService();
            lQueryService.Credentials = System.Net.CredentialCache.DefaultCredentials;
        }

        public List<ObjetoResultado> GetResultadoConsulta(string pStrConsulta, string pAmbito)
        {
            string lXmlConsulta = ArmarXmlConsulta(pStrConsulta, pAmbito);
            System.Data.DataSet lResultado = lQueryService.QueryEx(lXmlConsulta);
            System.Data.DataTable lDatosBusqueda = lResultado.Tables[0];
            return ResultadoDataTalbeToList(lDatosBusqueda);
        }

        public List<AmbitoBusqueda> GetMetadataBusqueda()
        {
            System.Data.DataSet lResultado = lQueryService.GetSearchMetadata();
            System.Data.DataTable lAmbitos = lResultado.Tables["Scopes"];
            return ResultadoAmbitoDataTalbeToList(lAmbitos);
        }
        private string ArmarXmlConsulta(string pStrConsulta, string pAmbito)
        {
            string lRetorno = string.Empty;
            lRetorno += "<QueryPacket xmlns='urn:Microsoft.Search.Query' >";
            lRetorno += "<Query>";
            lRetorno += "<SupportedFormats>";
            lRetorno += "<Format>urn:Microsoft.Search.Response.Document.Document</Format>";
            lRetorno += "</SupportedFormats>";
            lRetorno += "<Context>";
            lRetorno += "<QueryText language='en-US' type='STRING'>" + pStrConsulta + " scope:\"" + pAmbito +"\"";
            lRetorno += "</QueryText>";
            lRetorno += "</Context>";
            lRetorno += "</Query>";
            lRetorno += "</QueryPacket>";
            return lRetorno;
        }
        private List<ObjetoResultado> ResultadoDataTalbeToList(System.Data.DataTable pDtResultado)
        {
            List<ObjetoResultado> lRetorno = null;
            if (pDtResultado.Rows.Count > 0)
            {
                lRetorno = new List<ObjetoResultado>();
                foreach (System.Data.DataRow lDrResultado in pDtResultado.Rows)
                {
                    lRetorno.Add(new ObjetoResultado((long)lDrResultado[ObjetoResultado.WorkIdColumn],
                                                     (long)lDrResultado[ObjetoResultado.RankColumn],
                                                      lDrResultado[ObjetoResultado.TitleColumn].ToString(),
                                                      lDrResultado[ObjetoResultado.AuthorColumn].ToString(),
                                                      0,
                                                      lDrResultado[ObjetoResultado.PathColumn].ToString(),
                                                      lDrResultado[ObjetoResultado.DescriptionColumn].ToString(),
                                                      (DateTime)lDrResultado[ObjetoResultado.WriteColumn]));
                }
            }
            return lRetorno;
        }

        public List<ObjetoResultado> GetDatosDePrueba()
        {
            List<ObjetoResultado> lRetorno = null;
            lRetorno = new List<ObjetoResultado>();
            for (int i = 0; i < 10; i++)
            {
                lRetorno.Add(new ObjetoResultado(0,0,"Dato de prueba " + i.ToString(),"",0,"http://siderys.blogspot.com/2009/01/nuevo-blog-sobre-sharepoint-2007.html","",DateTime.MinValue));
            }
            return lRetorno;
        }

        private List<AmbitoBusqueda> ResultadoAmbitoDataTalbeToList(System.Data.DataTable pDtAmbito)
        {
            List<AmbitoBusqueda> lRetorno = null;
            if (pDtAmbito.Rows.Count > 0)
            {
                lRetorno = new List<AmbitoBusqueda>();
                foreach (System.Data.DataRow lDrAmbito in pDtAmbito.Rows)
                {
                    lRetorno.Add(new AmbitoBusqueda(lDrAmbito["Name"].ToString(), lDrAmbito["Description"].ToString()));
                }
            }
            return lRetorno;
        }
    }
}
